const eventEmitter = require('events')

// 用法 跟 vue2 eventbus 采用发布订阅模式
// on emit once off
/** 
 * 事件默认最多监听 10 个 超过会发出警告
 * setMaxListeners() 函数可以设置最大监听事件个数
 */
const event = new eventEmitter()
// event.setMaxListeners(20)
console.log(event.getMaxListeners())
// 订阅一个事件
event.on('test', (name) => {
    console.log(name)
})
// 发布
event.emit('test', 'mingzIU')
event.emit('test', 'mingzIU')

event.once('update', (...rest) => {
    console.log(...rest)
})
event.emit('update', 1, 2, 3, 4, 5)
event.emit('update', 1, 2, 3, 4, 5)

const remove = (...rest) => {
    console.log('remove', ...rest)
}
const create = (...rest) => {
    console.log('create', ...rest)
}
event.on('remove', remove)
event.on('createe', create)
event.emit('remove', '第一次执行', 'vsddfsvb')
event.emit('createe', 'csadvsdvds0))))', 'vsddfsvb')
// 根据函数名 和函数体 判断是否回收注册的事件
// event.off('remove', remove)
event.emit('remove', '第二次执行')


// ===============
function fn1 (params) {

}
function fn2 (params) {

}
fn1.prototype.test = 111
fn1.prototype.name = 'schusadicc'
fn2.prototype.test = 888
const a = new fn1()
const b = new fn2()
//  静态方法返回指定对象的原型
console.log(Object.getPrototypeOf(a))
//  静态方法可以将一个指定对象的原型（即内部的 [[Prototype]] 属性）设置为另一个对象或者 null。
Object.setPrototypeOf(a, b)
console.log(a.test)
